"""
作业：
1、编写一个学生方法，产生一堆学生对象（姓名），传入形参控制学生生成数量
2、创建一个方法，用来生成普通人必备的信息：姓名、年龄、住址、身份证号、手机号，随机生成20个写入personinfo.txt里
格式：姓名：xxx  年龄：xxx 住址：xxx 身份证号：xxx
3、文本 student.txt中包含下面的内容
zhangshan:30
lisi:50
wangwu:60
lifei:70
期望能够统计出其中的内容，以dict的形式保存，例如：
{"zhangshan":30,"lisi":50,"wangwu":60,"lifei":70}
4、给你一个 非空 整数数组 nums ，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。
5、输入：["1","a","b","3","5","8","_"] 想要提取里面得数字，并保存到一个列表中
6、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
用户通过input输入这4个内容(支持持续输入,Q或q退出),并传递给函数
函数接收到这些内容,将其追加到student_msg文件中
重点:复习文件操作
7、打印功能菜单、添加学生信息、删除学生信息、修改学生信息、显示学生信息、退出系统，并且需要接收用户的输入，在根据输入内容调用相应函数实现相应功能（存入文件），模板图如下。每次对学生管理系统发生改动，要写入改动点到log.txt文本中
8、如今的社交软件层出不穷，虽然功能千变万化，但都具有好友管理系统的基本功能，包括添加好友、删除好友、备注好友、展示好友等。下面是一个简单的好友管理系统的功能菜单（存入文件）
好友管理系统中有5个功能，每个功能都对应一个序号，用户可根据提示“请输入您的选项”选择序号执行相应的操作，包括：
"""


# 1、编写一个学生方法，产生一堆学生对象（姓名），传入形参控制学生生成数量
"""
def student_num(n):
    list1 = []
    for i in range(n):
        name = input("请你输入学生姓名")
        list1.append(name)
    return list1


print(student_num(5))
"""
# 2、创建一个方法，用来生成普通人必备的信息：姓名、年龄、住址、身份证号、手机号，随机生成20个写入personinfo.txt里
# 格式：姓名：xxx  年龄：xxx 住址：xxx 身份证号：xxx
"""
import random
from faker import Faker
def generate_person_info(n):
    persion = []
    for i in range(n):
        fake = Faker(locale="zh_cn")
        name = fake.name()
        age = random.randint(18, 55)
        address = fake.address()
        id_number = fake.ssn()
        phone_number = fake.phone_number()
        person_info = f"姓名：{name}  年龄：{age}  住址：{address}  身份证号：{id_number}  手机号：{phone_number}"
        persion.append(person_info)
    return persion
def write_to_file(file_path, data):
    with open(file_path, 'w', encoding='utf-8') as file:
        for item in data:
            file.write(item + '\n')
persion_info = generate_person_info(20)

write_to_file('personinfo.txt',persion_info)
"""
# 3、文本 student.txt中包含下面的内容
# zhangshan:30
# lisi:50
# wangwu:60
# lifei:70
# 期望能够统计出其中的内容，以dict的形式保存，例如：
# {"zhangshan":30,"lisi":50,"wangwu":60,"lifei":70}
"""
def student(file):
    student_dict = {}
    with open(file,'r',encoding='utf-8') as f:
        for i in f:
            name,score = i.strip().split(':')
            student_dict[name] = int(score)
    return  student_dict


print(student('student.txt'))
"""
# 4、给你一个 非空 整数数组 nums ，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。
"""
def only_num(nums):
    dict ={}
    for i in nums:
        if i in dict:
            dict[i] +=1
        else:
            dict[i] = 1
    for i in nums:
        if dict[i] == 1:
            return i,dict[i]


print(only_num([1, 1, 2,2,3]))

"""
# 5、输入：["1","a","b","3","5","8","_"] 想要提取里面得数字，并保存到一个列表中
"""
def new_list(args):
    result = []
    for i in args:
        if i in "123456789":
            result.append(i)
    return result


print(new_list(["1", "a", "b", "3", "5", "8", "_"]))
"""
# 6、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
# 用户通过input输入这4个内容(支持持续输入,Q或q退出),并传递给函数
# 函数接收到这些内容,将其追加到student_msg文件中
# 重点:复习文件操作
"""
def add_student_info_to_file(name, gender='男', age='', address=''):
    with open('student_msg.txt', 'a', encoding='utf-8') as file:
        file.write(f"姓名：{name}  性别：{gender}  年龄：{age}  地址：{address}\n")
while True:
    name_input = input("请输入姓名（输入Q或q退出）：")
    if name_input.lower() == 'q':
        print("已退出。")
        break
    gender_input = input("请输入性别（默认为男，直接回车可跳过）：")
    if not gender_input:
        gender_input = '男'
    age_input = input("请输入年龄：")
    address_input = input("请输入地址：")

    add_student_info_to_file(name_input, gender_input, age_input, address_input)
    print("信息已添加到文件中。")
"""
# 7、打印功能菜单、添加学生信息、删除学生信息、修改学生信息、显示学生信息、退出系统，并且需要接收用户的输入，在根据输入内容调用相应函数实现相应功能（存入文件），模板图如下。每次对学生管理系统发生改动，要写入改动点到log.txt文本中
# 8、如今的社交软件层出不穷，虽然功能千变万化，但都具有好友管理系统的基本功能，包括添加好友、删除好友、备注好友、展示好友等。下面是一个简单的好友管理系统的功能菜单（存入文件）
# 好友管理系统中有5个功能，每个功能都对应一个序号，用户可根据提示“请输入您的选项”选择序号执行相应的操作，包括：
# 读取好友信息
def read_friends():
    try:
        with open('friends.txt', 'r') as file:
            friends = [line.strip() for line in file]
    except FileNotFoundError:
        friends = []
    return friends


# 写入好友信息
def write_friends(friends):
    with open('friends.txt', 'w') as file:
        for friend in friends:
            file.write(friend + '\n')


# 添加好友
def add_friend():
    name = input("请输入要添加的好友姓名：")
    friends = read_friends()
    friends.append(name)
    write_friends(friends)
    print(f"{name} 已成功添加为好友。")


# 删除好友
def delete_friend():
    name = input("请输入要删除的好友姓名：")
    friends = read_friends()
    if name in friends:
        friends.remove(name)
        write_friends(friends)
        print(f"{name} 已成功删除。")
    else:
        print(f"未找到姓名为 {name} 的好友。")


# 备注好友
def remark_friend():
    old_name = input("请输入要修改的好友姓名：")
    new_name = input("请输入修改后的好友姓名：")
    friends = read_friends()
    if old_name in friends:
        index = friends.index(old_name)
        friends[index] = new_name
        write_friends(friends)
        print(f"备注成功，{old_name} 已修改为 {new_name}。")
    else:
        print(f"未找到姓名为 {old_name} 的好友。")


# 展示好友
def show_friends():
    friends = read_friends()
    if not friends:
        print("好友列表为空。")
    else:
        print("好友列表：")
        for friend in friends:
            print(f"姓名：{friend}")


# 主程序
while True:
    print("\n好友管理系统功能菜单：")
    print("1. 添加好友")
    print("2. 删除好友")
    print("3. 备注好友")
    print("4. 展示好友")
    print("5. 退出系统")

    choice = input("请输入您的选项：")

    if choice == '1':
        add_friend()
    elif choice == '2':
        delete_friend()
    elif choice == '3':
        remark_friend()
    elif choice == '4':
        show_friends()
    elif choice == '5':
        print("感谢使用好友管理系统，再见！")
        break
    else:
        print("无效的选项，请重新输入。")